<?php
//变量和数据检查类

class InputValidate extends Validate{

	//有效性检验数组
	protected $validate = array();

	function __construct($array){
		$this->setValid($array);
	}

	function setValid($array){
		$this->validate = $array;
	}

	//验证post来的数据的有效性
	//验证post数组的key与validate数组中的key一致的部分
	function PostVal($arr){
		;
	}

	//给定数组，验证数值的有效性。
	//要求给定数组中的索引与validate的索引一致
	//如果validate数组中有给定数组中不存在的索引，返回错误提示
	//验证通过返回true，验证失败，返回第一个验证失败条目的错误提示
	function ArrayVal($array){
		if(!is_array($this->validate) || empty($this->validate)){
			echo "<p>没有指定验证规则!</p>";
			return false;
		}
		if(!is_array($array) || empty($array)){
			return false;
		}
		$errmsg = "";
		
		foreach($this->validate as $key=>$rule ){
			if(array_key_exists($key, $array)){
				$errmsg = $this->doVal($rule, $array[$key]);
				if(!($errmsg===true)){
					//echo "<p>err: $errmsg</p>";
					return $errmsg;
				}
			}else{
				return array_pop($rule[0]);
			}
		}
		return true;
	}
	
	//验证函数
	//@param $rule 验证规则，如果$rule为空，则不需要验证
	//@param $inval 需要验证的数据
	protected function doVal($rule, $value){
		if(!is_array($rule) || empty($rule) || $rule==NULL){
			return true;
		}

		foreach($rule as $_sub){
			$csr = count($_sub);
			if($csr == 2){
				list($func, $msg) = $_sub;
			}
			if($csr == 3){
				list($func, $param, $msg) = $_sub;
			}
			if($func=="not_empty"){
				if(self::isEmpty($value)){
					return $msg;
				}
			}else if($func=="min_length"){
				if(!self::MinLength($value, $param)){
					return $msg;
				}
			}else if($func=="max_length"){
				if(!self::MaxLength($value, $param)){
					return $msg;
				}
			}else if($func=="email"){
				if(!self::isEmail($value, $param)){
					return $msg;
				}
			}else if($func=="ereg"){
				if(!self::useEreg($value, $param)){
					return $msg;
				}
			}else{
				echo "<p>Validate not define!</p>";
				return false;
			}

		}
		return true;
	}

}
?>
